package com.zhoukx.template.imporve;


/**
 * 模板方法模式  表示豆浆
 */
public abstract class SoyaMilk {

    // 模板方法不让子类去覆盖
    public final void make() {
        select();
        if (cunstomerWantCondiments()) {
            addCondiments();
        }
        soak();
        beat();
    }

    // 选材
    public void select() {
        System.out.println("第一步：选择好的新鲜黄豆");
    }

    // 添加材料  抽象方法
    public abstract void addCondiments();

    // 浸泡
    public void soak() {
        System.out.println("第三步：黄豆和配料开始浸泡，需要3个小时");
    }

    // 打碎
    public void beat() {
        System.out.println("第四步：黄豆和配料放到豆浆机去打碎");

    }
    // 钩子方法，决定是否添加配料
      boolean cunstomerWantCondiments() {
        return true;
      }
}
